package com.offcn.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.offcn.mapper.CheckgroupCheckitemMapper;
import com.offcn.mapper.CheckitemMapper;
import com.offcn.pojo.CheckgroupCheckitem;
import com.offcn.pojo.Checkitem;
import com.offcn.service.CheckitemService;
import com.offcn.utils.MessageConstant;
import com.offcn.utils.PageResult;
import com.offcn.utils.QueryPageBean;
import com.offcn.utils.Result;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @program: offcnpe_parent
 * @description:
 * @author: xin yi
 * @create: 2021-07-14 14:51
 */
@Service
public class CheckitemServiceImpl implements CheckitemService {

    @Autowired/*这里不能用@Reference注解，只在CheckitemService上用*/
    private CheckitemMapper checkitemMapper;

    @Autowired
    private CheckgroupCheckitemMapper checkgroupCheckitemMapper;

    @Override
    public PageResult checkItem(QueryPageBean queryPageBean) {/*checkitem.html页面检查项分页查询展示*/
        /*1.设置分页*/                /*public Page(long current, long size) {this(current, size, 0L);}*//*包米豆自带的分页*/
        Page<Checkitem> checkitemPage = new Page<>(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());

        /*wrapper第一个参数是数据库表里的列名，第二个是对应要赋给的值*/
        QueryWrapper<Checkitem> wrapper = new QueryWrapper<>();
        /*2.设置分页条件*/
        if (queryPageBean.getQueryString() != null && !"".equals(queryPageBean.getQueryString())){
            wrapper = new QueryWrapper<>();
            wrapper.eq("code",queryPageBean.getQueryString()).or().like("name",queryPageBean.getQueryString());
//            wrapper.eq("code",queryPageBean.getQueryString());
        }

        /*3.查询*/
        Page<Checkitem> selectPage = checkitemMapper.selectPage(checkitemPage, wrapper);

        /*4.封装进PageResult*/
        PageResult pageResult = new PageResult(selectPage.getTotal(), selectPage.getRecords());
        return pageResult;
    }

    @Override
    public Result addCheckItem(Checkitem checkitem) {/*checkitem.html页面添加检查项*/
        /*单表直接调用添加方法insert*/
        int row = checkitemMapper.insert(checkitem);
        /*再判断插入行数，根据行数返回一个Result类型的结果  Result工具类可返回参数*/
//        private boolean flag;//执行结果，true为执行成功 false为执行失败
//        private String message;//返回结果信息，主要用于页面提示信息
//        private Object data;//返回数据
        if (row > 0){                     /*MessageConstant里面放的都是返回提示信息用的静态消息常量*/
            return new Result(true, MessageConstant.ADD_CHECKITEM_SUCCESS);
        }
        return new Result(false, MessageConstant.ADD_CHECKITEM_FAIL);
    }

    @Override
    public Result editCheckItemById(Checkitem checkitem) {/*checkitem.html页面编辑确认之后修改数据*/
        /*单表可以直接修改简单暴力*/
        int row = checkitemMapper.updateById(checkitem);
        if (row > 0){
            return new Result(true, MessageConstant.EDIT_CHECKITEM_SUCCESS);
        }
        return new Result(false, MessageConstant.EDIT_CHECKITEM_FAIL);
    }

    @Override
    public Result deleteCheckItemById(Integer id) {/*checkitem.html页面根据row.id删除方法*/
        /*先删除检查组与检查项中间表中的数据*//*可以用map，也可以用QueryWrapper*/
        /*QueryWrapper ： Entity 对象封装操作类，不是用lambda语法*/
//        HashMap<String, Object> map = new HashMap<>();
//        map.put("checkitem_id",id);
//        checkgroupCheckitemMapper.deleteByMap(map);
        QueryWrapper<CheckgroupCheckitem> wrapper = new QueryWrapper<>();
        wrapper.eq("checkitem_id",id);
        checkgroupCheckitemMapper.delete(wrapper);

        /*再删主表*/
        int row = checkitemMapper.deleteById(id);
        if (row > 0){
            return new Result(true, MessageConstant.DELETE_CHECKITEM_SUCCESS);
        }
        return new Result(false, MessageConstant.DELETE_CHECKITEM_FAIL);
    }

    @Override
    public Checkitem getCheckItemById(Integer id) {/*checkitem.html页面编辑根据id查找并回显数据*/
        return checkitemMapper.selectById(id);
    }

    @Override
    public List<Checkitem> getCheckitems() {/*checkgroup.html页面编辑回显数据的时候，发送的查找所有项目的请求*/
        /*selectList条件构造器直接赋null等于查所有*/
//        QueryWrapper<Checkitem> wrapper = new QueryWrapper<>();
//        List<Checkitem> checkitemList = checkitemMapper.selectList(wrapper);
//        return checkitemList;
        return checkitemMapper.selectList(null);
    }

    @Override
    public List<Integer> getCheckitemsByGroupById(Integer id) {/*checkgroup.html页面编辑的时候回显选中的检查项*/
        /*可以用map集合先存id，在调用条件构造器selectByMap方法，返回一个list集合（因为前端需要的是数据id，不需要对象），再用一个int类型的数组接收*/
        QueryWrapper<CheckgroupCheckitem> wrapper = new QueryWrapper<>();
        ArrayList<Integer> list = new ArrayList<>();
        wrapper.eq("checkgroup_id",id);
        List<CheckgroupCheckitem> checkgroupCheckitemList = checkgroupCheckitemMapper.selectList(wrapper);
        for (CheckgroupCheckitem checkgroupCheckitem : checkgroupCheckitemList) {
            list.add(checkgroupCheckitem.getCheckitemId());
        }
//        Map<String, Object> map = new HashMap<>();
//        map.put("checkgroup_id",id);
//        List<CheckgroupCheckitem> checkgroupCheckitems = checkgroupCheckitemMapper.selectByMap(map);
//        List<Integer> list = new ArrayList<>();
//        for (CheckgroupCheckitem checkgroupCheckitem : checkgroupCheckitems) {
//            list.add(checkgroupCheckitem.getCheckitemId());
//        }
        return list;

    }


}
